package www.ym.com.controller;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import www.ym.com.common.R;
import www.ym.com.dto.SetmealDto;
import www.ym.com.entity.Category;
import www.ym.com.entity.Setmeal;
import www.ym.com.entity.SetmealDish;
import www.ym.com.service.CategoryService;
import www.ym.com.service.SetmealDishService;
import www.ym.com.service.SetmealService;

import javax.websocket.server.PathParam;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 套餐
 */
@RestController
@RequestMapping("/setmeal")
public class SetmealController {
    @Autowired
    private CategoryService categoryService;

    @Autowired
    private SetmealService setmealService;

    @Autowired
    private SetmealDishService setmealDishService;


    /**
     * 新增套餐
     *
     * @param setmealDto
     * @return
     */
    @PostMapping("/add")
    public R<String> addSteal(@RequestBody SetmealDto setmealDto) {
        setmealService.addWidthDish(setmealDto);
        return R.success(null, "新增套餐成功");
    }

    /**
     * 修改套餐
     *
     * @param setmealDto
     * @return
     */
    @PostMapping("/update")
    public R<String> updateSteal(@RequestBody SetmealDto setmealDto) {
        setmealService.updateWithDish(setmealDto);
        return R.success(null, "修改套餐成功");
    }

    /**
     * 删除套餐
     *
     * @param id
     * @return
     */
    @DeleteMapping("/del")
    public R<String> delSteal(Long id) {
        setmealService.delById(id);
        return R.success(null, "删除成功");
    }

    /**
     * 修改套餐状态
     *
     * @param
     * @return
     */
    @PostMapping("/status/{status}")
    public R<String> changeStatus(@PathVariable Integer status, @RequestBody List<Long> ids) {
        setmealService.changeStatus(status, ids);
        return R.success(null, "修改状态成功");
    }

    /**
     * 查看套餐详情
     *
     * @param
     * @return
     */
    @GetMapping("/detail")
    public R<SetmealDto> detail(Long id) {
        SetmealDto byIdDish = setmealService.getByIdDish(id);
        return R.success(byIdDish, null);
    }

    @PostMapping("/list")
    public R<Page> list(@RequestBody JSONObject jsonObject) {

        Long pageNum = Long.valueOf(String.valueOf(jsonObject.get("pageNum")));
        //每页显示数
        Long pageSize = Long.valueOf(String.valueOf(jsonObject.get("pageSize")));
        //分类名称
        String name = String.valueOf(jsonObject.get("name"));
        Integer status=null;
        if(String.valueOf(jsonObject.get("status"))==""){
            status=null;
        }else{
            status = Integer.valueOf(String.valueOf(jsonObject.get("status")));

        }

//        Integer status = Integer.valueOf(String.valueOf(jsonObject.get("status")));

        Page<Setmeal> page = new Page<>(pageNum, pageSize);
        Page<SetmealDto> setmealDtoPage = new Page<>();
        LambdaQueryWrapper<Setmeal> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(name != null, Setmeal::getName, name).eq(status!=null,Setmeal::getStatus,status);
//        .ne(status!=null,Setmeal::getStatus,status)
        Page<Setmeal> setmealPage = setmealService.page(page, wrapper);
        List<Setmeal> records = setmealPage.getRecords();

        BeanUtils.copyProperties(setmealPage, setmealDtoPage, "records");

        List<SetmealDto> list = records.stream().map((item) -> {
            SetmealDto dto = new SetmealDto();
            Category byId = categoryService.getById(item.getCategoryId());
            dto.setCategoryName(byId.getCategoryName());
            BeanUtils.copyProperties(item, dto);
            return dto;
        }).collect(Collectors.toList());
        setmealDtoPage.setRecords(list);

        return R.success(setmealDtoPage, "");
    }



//    //添加菜品
//    @PostMapping
//    public R<String> add(@RequestBody SetmealDto setmealDto) {
//        setmealService.saveWithDish(setmealDto);
//        return R.success("添加套餐成功");
//    }
//
//    @GetMapping("/page")
//    public R<Page> page(int page, int pageSize, String name) {
//        Page<Setmeal> infoPage = new Page<>(page, pageSize);
//        Page<SetmealDto> dtoPage = new Page<>();
//
//        LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.like(name != null, Setmeal::getName, name);
//        queryWrapper.orderByDesc(Setmeal::getUpdateTime);
//        setmealService.page(infoPage, queryWrapper);
//
//        BeanUtils.copyProperties(infoPage, dtoPage, "records");
//        List<Setmeal> records = infoPage.getRecords();
//
//        List<SetmealDto> list = records.stream().map((item) -> {
//            SetmealDto setmealDto = new SetmealDto();
//            BeanUtils.copyProperties(item, setmealDto);
//            Long categoryId = item.getCategoryId();
//            Category category = categoryService.getById(categoryId);
//            if (category != null) {
//                String idName = category.getName();
//                setmealDto.setCategoryName(idName);
//            }
//            return setmealDto;
//        }).collect(Collectors.toList());
//
//        dtoPage.setRecords(list);
//        return R.success(dtoPage);
//    }
//
//    /**
//     * 根据id查询套餐信息包括菜品信息
//     *
//     * @param id
//     * @return
//     */
//    @GetMapping("/{id}")
//    public R<SetmealDto> getByIdDish(@PathVariable Long id) {
//        SetmealDto setmealDto = setmealService.getByIdDish(id);
//        return R.success(setmealDto);
//    }
//
//    @PutMapping
//    public R<String> updateWithDish(@RequestBody SetmealDto setmealDto) {
//        setmealService.updateWithDish(setmealDto);
//        return R.success("修改套餐信息成功");
//    }
//
//    //删除套餐信息
//    @DeleteMapping
//    public R<String> deleteWithDish(@RequestParam("ids") List<Long> id) {
//        setmealService.deleteWithDish(id);
//        return R.success("删除套餐成功");
//    }
//
//    //修改套餐状态；停售，启售
//    @PostMapping("/status/{status}")
//    public R<String> updateStatus(@PathVariable Integer status, @RequestParam("ids") List<Long> id) {
//        LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.in(Setmeal::getId, id);
//        List<Setmeal> list = setmealService.list(queryWrapper);
//        if (list != null) {
//            for (Setmeal setmeal:list) {
//                setmeal.setStatus(status);
//                setmealService.updateById(setmeal);
//            }
//        }
//        return R.success("修改套餐信息成功");
//    }
//
//    /**
//     * 移動端查詢套餐信息
//     * @param setmeal
//     * @return
//     */
//    @GetMapping("/list")
//    public R<List<Setmeal>> list(Setmeal setmeal){
//        LambdaQueryWrapper<Setmeal> queryWrapper=new LambdaQueryWrapper<>();
//        queryWrapper.eq(setmeal.getCategoryId()!=null,Setmeal::getCategoryId,setmeal.getCategoryId());
//        queryWrapper.eq(setmeal.getStatus()!=null,Setmeal::getStatus,setmeal.getStatus());
//        queryWrapper.orderByDesc(Setmeal::getUpdateTime);
//        List<Setmeal> list = setmealService.list(queryWrapper);
//        return R.success(list);
//
//    }

}

